<?php

namespace App\Api\Traits;

trait ToolTraits
{
    /**
     * 获取array1与array2共存的数值，1是二维数组，2是一维数组且进行了键值互换
     * @param array $array1
     * @param array $array2
     * @return array
     */
    public function array_intersect_ktv(array $array1, array $array2): array
    {
        $array2 = array_flip($array2); // 键值互换
        return array_intersect_key($array1, $array2); // 返回数组1当中键值相同的数值组合而成的新数组
    }

    /**
     * @param array $array 数组字段
     * @param string $exist_val 校验字段
     * @param mixed $callback 回调方法
     * @return bool
     */
    public function isExist(array $array, string $exist_val, mixed $callback = null): bool
    {
        if (isset($array[$exist_val]) && !empty($array[$exist_val])) {
            return $callback ?? true;
        }
        return false;
    }

    /**
     * 获取树形结构
     * @param array $data
     * @param int $increment
     * @param string $id
     * @param string $pid
     * @param string $nodes
     * @return array
     */
    public function getTree(
        array  $data,
        int    $increment = 0,
        string $id = 'id',
        string $pid = 'parent_id',
        string $nodes = 'children'
    ): array
    {
        $ret = [];
        foreach ($data as $key => $value) {
            if ($value[$pid] === $increment) {
                $value[$nodes] = self::getTree($data, $value['id'], $id, $pid, $nodes);
                $ret[] = $value;
            }
        }
        return $ret;
    }
}
